home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Precision Software Appli…tions Silver Collection 1
/
Precision Software Applications Silver Collection Volume One (PSM) (1993).iso
/
tutor
/
typteach.exe
/
TYPETEST.BAS
< prev
Wrap
BASIC Source File
|
1984-04-12
|
6KB
|
188 lines
10 'TYPER
20 'COPYRIGHT 1984, GORMAN PROGRAMMING
30 'STAMFORD, CT
40 '
50 'TYPER IS MADE AVAILABLE AS PUBLIC DOMAIN SOFTWARE
60 'SO LONG AS THE ABOVE MESSAGE AND START SCREENS ARE RETAINED
70 '
80 KEY OFF:SCREEN 1:COLOR 1,0:CLS
90 DIM FACE(20),SAMS(20),BOX(20)
100 LOCATE 1,1:PRINT CHR$(2);
110 GET (0,0)-(7,7),FACE
120 LOCATE 1,1:PRINT " "
130 LINE (0,3)-(3,0),1
140 LINE -(6,3),1:LINE -(0,3),1
150 PAINT (3,2),1,1
160 GET (0,0)-(7,7),SAMS
170 LOCATE 1,1:PRINT CHR$(251);
180 GET (0,0)-(7,7),BOX
190 LOCATE 1,1:PRINT " "
200 COLOR ,1:DIM G(24,4)
210 FOR I=1 TO 24:READ G(I,1),G(I,2),G(I,3),G(I,4):NEXT
220 DATA 228,47,0,0,228,42,0,-1,86,42,-1,0,86,93,0,1,228,93,1,0,228,74,0,-1,165,74,-1,0
230 DATA 165,76,0,0,225,76,1,0,225,91,0,1,89,91,-1,0,89,44,0,-1,225,44,1,0,225,47,0,1
240 DATA 117,87,0,0,117,50,0,-1,192,50,1,0,192,69,0,1,124,69,-1,0
250 DATA 124,67,0,0,189,67,1,0,189,52,0,-1,120,52,-1,0,120,87,0,1
260 SCREEN 1:COLOR 1,1:KEY OFF:CLS
270 FOR I=1 TO 23
280 A1=G(I,1):A2=G(I+1,1):B1=G(I,2):B2=G(I+1,2)
290 IF G(I+1,3)=0 THEN 340
300 FOR J=A1 TO A2 STEP G(I+1,3)
310 PSET (J-6,B1+13),3
320 NEXT J
330 GOTO 380
340 IF G(I+1,4)=0 THEN 380
350 FOR J=B1 TO B2 STEP G(I+1,4)
360 PSET (A1-6,J+13),3
370 NEXT J
380 NEXT I
390 LOCATE 15,11
400 PRINT "GORMAN PROGRAMMING"
410 FOR I=1 TO 3000:NEXT
420 LOCATE 18,16
430 PRINT "PRESENTS"
440 FOR I=1 TO 2000:NEXT
450 ERASE G:CLS
460 COLOR 1,0
470 DEFSTR A:TX=0:GAME=0
480 DIM HFACE(8),HSAMS(8) 'HORIZONTAL POSITIONS
490 DIM VFACE(8),VSAMS(8) 'VERTICAL POSITIONS
500 DIM HIT(8),PHIT(8) 'HITS, POSITION OF COUNTER
510 DIM LTRS(26) 'ALPHABET IN USE
520 DIM ASAMS(8) 'LETTERS OF THE SAMS (IN USE)
530 LOCATE 24,40:PRINT "\";
540 LOCATE 23,1:PRINT "/ \/ \/ \/ \/ \/ \/ \/ ";
550 LINE (0,8)-(319,15),2,BF
560 FOR I=0 TO 315 STEP 8
570 PUT (I,8),BOX
580 NEXT
590 FOR I = 1 TO 8
600 LOCATE 3,(I-1)*5+3:PRINT "|";
610 NEXT
620 LINE(0,185)-(319,199),2,BF
630 LOCATE 22,1:PRINT " / \ / \ / \ / \ / \ / \ / \ / \";
640 DEF SEG = &H40
650 X=PEEK(&H17)
660 POKE &H17,X OR 64
670 DEF SEG
680 FOR I=1 TO 8
690 HIT(I)=0
700 HFACE(I)=(I-1)*40+16:HSAMS(I)=HFACE(I)
710 VFACE(I)=23:VSAMS(I)=160
720 PHIT(I)=(I-1)*5+2
730 NEXT
740 TOTALP=0
750 FOR I=4 TO 20:LOCATE I,1:PRINT SPC(79);:NEXT
760 FOR I=1 TO 8
770 PUT (HSAMS(I),VSAMS(I)),SAMS
780 NEXT
790 PLAY "MBL4O3T220GFL8EDCDL4EO4CO3L4GEL4FEL8DCO2BO3GL1C"
800 LINE(100,64)-(119,64)
810 LINE(110,64)-(110,86)
820 LINE(129,64)-(140,75)
830 LINE(151,64)-(140,75)
840 LINE -(140,86)
850 LINE(158,86)-(158,64)
860 LINE -(174,64):LINE -(174,74)
870 LINE -(158,74)
880 LINE(204,64)-(186,64)
890 LINE -(186,86):LINE -(204,86)
900 LINE(186,74)-(200,74)
910 LINE(65,98)-(84,98):LINE(75,98)-(75,120)
920 LINE(114,98)-(96,98)
930 LINE -(96,120):LINE -(114,120)
940 LINE(96,108)-(110,108)
950 LINE(146,100)-(146,98)
960 LINE -(127,98):LINE -(127,108)
970 LINE -(146,108):LINE -(146,120)
980 LINE -(127,120):LINE -(127,116)
990 LINE(158,98)-(177,98):LINE(168,98)-(168,120)
1000 LINE(210,98)-(192,98)
1010 LINE -(192,120):LINE -(210,120)
1020 LINE(192,108)-(206,108)
1030 LINE(224,120)-(224,98)
1040 LINE -(240,98):LINE -(240,108):LINE -(224,108)
1050 LINE(237,108)-(243,120)
1060 FOR I=1 TO 2000:NEXT
1070 LOCATE 25,3:PRINT " COPYRIGHT 1984, GORMAN PROGRAMMING ";
1080 FOR I=1 TO 2000:NEXT
1090 IF GAME=0 THEN GAME=1:FOR I=1 TO 3000:NEXT
1100 LINE(0,185)-(319,199),2,BF
1110 FOR I=1 TO 8
1120 PUT (HFACE(I),188),FACE
1130 NEXT
1140 FOR I=1 TO 2000:NEXT
1150 FOR I=9 TO 16:LOCATE I,1:PRINT SPC(79);:NEXT
1160 LOCATE 10,7:PRINT "GAME OR PRACTICE (G/P)?";
1170 AA=INKEY$:IF AA="" THEN 1170
1180 IF AA="G" THEN DROP=1:G=1:GOTO 1260
1190 IF AA<>"P" THEN 1170
1200 LOCATE 10,6:PRINT " 1 2 3 4 5 6 7 8 9"
1210 LOCATE 12,8:PRINT "SLOWER- - - - - - -FASTER"
1220 LOCATE 15,11:PRINT "ENTER DROP SPEED: "
1230 AA=INKEY$:IF AA="" THEN 1230
1240 IF VAL(AA)>9 OR VAL(AA)<1 THEN 1230
1250 DROP=VAL(AA):G=0
1260 FOR I=10 TO 15:LOCATE I,1:PRINT SPC(79);:NEXT
1270 FOR I=188 TO 28 STEP -5
1280 FOR J=1 TO 8
1290 PUT (HFACE(J),I),FACE,XOR
1300 PUT (HFACE(J),I-5),FACE,XOR
1310 NEXT:NEXT
1320 FOR I=1 TO 8
1330 GOSUB 1660
1340 ASAMS(I)=AX:LOCATE 23,(I-1)*5+3:PRINT AX;
1350 LOCATE 1,PHIT(I):PRINT HIT(I);
1360 NEXT
1370 SOUND 1000,4:TIME$="00:00:00"
1380 GOSUB 1570:AA=INKEY$:IF AA="" THEN 1380
1390 IF AA=CHR$(27) THEN 1700
1400 IF AA>"Z" OR AA<"A" THEN 1380
1410 FOR II=1 TO 8:IF AA=ASAMS(II) THEN 1430 ELSE NEXT
1420 GOTO 1380
1430 ASAMS(II)="":PUT (HSAMS(II),VSAMS(II)),SAMS,XOR
1440 FOR JJ=160 TO VFACE(II)+6 STEP -7:PUT (HSAMS(II),JJ),SAMS,XOR:PUT (HSAMS(II),JJ),SAMS,XOR:NEXT
1450 PLAY"MBO3L50MSCDEFG":CIRCLE(HSAMS(II)+3,JJ+3),7,2
1460 PAINT (HSAMS(II),JJ+3),3,2:PAINT (HSAMS(II),JJ+3),0,0
1470 GOSUB 1660:ASAMS(II)=AX:LOCATE 23,(II-1)*5+3:PRINT AX;:VFACE(II)=23
1480 PUT(HFACE(II),VFACE(II)),FACE,XOR:PUT(HSAMS(II),VSAMS(II)),SAMS,XOR
1490 HIT(II)=HIT(II)+1:LOCATE 1,PHIT(II):PRINT HIT(II);
1500 IF G=1 THEN TOTALP=TOTALP+1:IF TOTALP MOD 30=0 THEN DROP=DROP+1
1510 GOTO 1380
1520 VFACE(I)=188:ASAMS(I)="":BEEP
1530 PUT (HFACE(I),VFACE(I)),FACE,XOR
1540 TSTR=TSTR+1
1550 LOCATE 23,(I-1)*5+3:PRINT " ";
1560 GOTO 1630
1570 TSTR=0
1580 FOR I=1 TO 8
1590 IF VFACE(I)=188 THEN TSTR=TSTR+1:GOTO 1630
1600 PUT (HFACE(I),VFACE(I)),FACE,XOR:VFACE(I)=VFACE(I)+DROP
1610 IF VFACE(I)>150 THEN GOTO 1520
1620 PUT (HFACE(I),VFACE(I)),FACE,XOR
1630 NEXT I
1640 IF TSTR=8 THEN 1700 ELSE RETURN
1650 GOTO 1650
1660 'GET A LETTER
1670 L=CINT(RND*100):IF L<65 OR L>90 THEN 1670
1680 AX=CHR$(L):FOR K=1 TO 8:IF AX=ASAMS(K) THEN 1670 ELSE NEXT
1690 RETURN
1700 ATM=TIME$
1710 FOR I=4 TO 20:LOCATE I,1:PRINT SPC(79);:NEXT
1720 IF G=0 THEN GOTO 1800
1730 LOCATE 7,2:PRINT "YOUR SCORE IS: ";TOTALP
1740 LOCATE 9,2:PRINT "TIME ELAPSED : ";
1750 PRINT MID$(ATM,4,2);" MINUTES ";RIGHT$(ATM,2);" SECONDS"
1760 LOCATE 11,2:PRINT "YOUR TYPING RATIO IS: ";
1770 TTL=VAL(MID$(ATM,4,2))*60+VAL(RIGHT$(ATM,2))
1780 TTL=CINT((TOTALP/TTL)*100)
1790 PRINT TTL
1800 LOCATE 17,2:PRINT "WOULD YOU LIKE TO PLAY AGAIN? (Y/N) ";
1810 TIME$="00:00:00"
1820 IF TIME$>"00:00:45" THEN CLS:END
1830 AA=INKEY$:IF AA="" THEN 1820
1840 IF AA="N" THEN CLS:END
1850 IF AA="Y" THEN CLS:GOTO 530
1860 GOTO 1820
HEN CLS:END
1830 AA=